<?php

namespace app\index\controller;

use app\common\lib\ali\Sms;
use app\common\lib\Redis;
use app\common\lib\Util;

class Send
{
    /**
     * 发送验证码
     */
    public function index()
    {
        //intval这个表示传的phone_num本来是个字符串，加了intval就把phone_num变成int类型
        //这个方法一样也是因为swoole没清空机制，导致每次request的值都不变化
        //$phoneNum = request()->get('phone_num', 0, 'intval');

        $phoneNum = intval($_GET['phone_num']);
        if (empty($phoneNum)) {
            //status 0 1, message, data
            return Util::show(config('code.error'), 'error');
        }
        //验证手机号码
        $res = preg_match("/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/", $phoneNum);
        if (empty($res)) {
            return Util::show(config('code.error'), 'phone number error');
        }

        //生成随机数
        $code = rand(1000, 9999);

        //这里是常规的处理第三方平台发送验证码，但是我们最好是放到swoole的task异步任务里面
        //让他去处理，这样第三方不管出现什么问题。都不影响我们的程序代码
        /*try {
            //发送短信号码
            $response = Sms::sendSms($phoneNum, $code);
        } catch (\Exception $e) {
            //todo
            return Util::show(config('code.error'), '服务器异常，暂时无法发送');
        }*/
        $taskData = [
            'method' => 'sendSms',
            'data' => [
                'phone' => $phoneNum,
                'code' => $code,
            ],
        ];
        //这里我们借助swoole和thinkphp来做这么个task异步任务,从post[ws_server]拿到ws server对象
        $_POST['ws_server']->task($taskData);

        return Util::show(config('code.success'), 'success');

        //因为把发送验证码的逻辑放到task异步任务去了，所以这里直接返回正确就行
        //不管耗时多久，都是异步去在处理。不影响用户操作
        /*if ($response->Code == "OK") {
            //发送成功,记录信息redis
            //用携程redis
            $redis = new \Swoole\Coroutine\Redis();
            $redis->connect(config('redis.host'), config('redis.port'));
            $redis->set(Redis::smsKey($phoneNum), $code, config('redis.out_time'));
            return Util::show(config('code.success'), 'success');
        } else {
            return Util::show(config('code.error'), '服务器异常，请联系客服');
        }*/
    }
}
